using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SeataNet.Core;
using SeataNet.Core.Configuration;

namespace SeataNet.Samples.OrderService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // 添加服务到容器
            ConfigureServices(builder.Services, builder.Configuration);

            var app = builder.Build();

            // 配置 HTTP 请求管道
            ConfigureApp(app);

            app.Run();
        }

        private static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            // 添加控制器
            services.AddControllers();

            // 添加 Swagger (需要安装 Swashbuckle.AspNetCore NuGet包)
            services.AddEndpointsApiExplorer();
            // services.AddSwaggerGen();

            // 配置 HttpClient
            services.AddHttpClient();

            // ===== 配置 Seata .NET（与 Java Seata 保持一致）=====

            // 方式1：使用配置文件（推荐）
            services.AddSeataNet(configuration.GetSection("Seata"));

            // 方式2：使用代码配置
            // services.AddSeataNet(options =>
            // {
            //     options.ApplicationId = "order-service";
            //     options.TransactionServiceGroup = "my_test_tx_group";
            //     options.ConfigType = "nacos";
            //     options.RegistryType = "nacos";
            //     options.TcServerAddress = "127.0.0.1:8091";
            // });

            // 配置 AT 模式数据源代理 (需要实现 AddAtDataSource 扩展方法)
            // 对应 Java: @Bean DataSourceProxy
            // services.AddAtDataSource(options =>
            // {
            //     options.ConnectionString = configuration.GetConnectionString("OrderDatabase");
            //     options.ProviderName = "MySql.Data.MySqlClient";
            //     options.ResourceId = "order-db"; // 资源ID，与 Java 端保持一致
            // });

            // 配置 TCC 模式（可选）
            // services.AddTccMode();

            // 配置 Saga 模式（可选）
            // services.AddSagaMode();

            // 配置 XA 模式（可选）
            // services.AddXaMode();
        }

        private static void ConfigureApp(WebApplication app)
        {
            // 开发环境配置
            if (app.Environment.IsDevelopment())
            {
                // app.UseSwagger();     // 需要安装 Swashbuckle.AspNetCore NuGet包
                // app.UseSwaggerUI();   // 需要安装 Swashbuckle.AspNetCore NuGet包
            }

            app.UseHttpsRedirection();
            app.UseAuthorization();
            app.MapControllers();
        }
    }
}
